草庐IT

C++ unique_ptr 和映射

全部标签

c++ - 使用 std::unique_ptr 管理 COM 对象

我正在尝试使用智能指针在我的类中保存COM对象,同时避免使用ComPtr。是否可以为此目的使用unique_ptr?我对智能指针很陌生,到目前为止我有点困惑。请考虑以下简化代码:classTexture{private:structComDeleter{operator()(IUnknown*p){p.Release();deletep;}}ID3D11Texture*m_dumbTexture;std::unique_ptrm_smartTexture;public:ID3D11Texture*getDumbTexture()const{returnm_dumbTexture;}ID

c++ - 如何仅在一个函数的参数上应用类型映射?

我正尝试在Java中为C++解决方案创建一个包装器。在这个C++项目中有2个函数:intfunc1(constvoid*b);intfunc2(constvoid*b);我只需要在intfunc2(constvoid*b);上应用此规则(类型映射):%applychar*BYTE{constvoid*b};这是一个约束,因为constvoid*的使用在函数之间是不同的。备注:我无权将fucn1的参数从b重命名为其他名称。谢谢。 最佳答案 在func1和func2的声明之间尝试%clear:%{#include"funcs.h"%}%

c++ - union 中的 std::shared_ptr

我正在实现一个“变体”类,它必须具有尽可能小的内存占用并使用共享指针机制存储一些对象。为此,我想在所有变量类型的类中建立一个union。这包括一些shared_ptr。operator=和复制构造函数必须更改变量的数据类型,从而切换到union中的另一个成员。切换到shared_ptr后,应将其重置为null而无需删除/取消拥有指针。有办法做到这一点吗?当然,还有其他方法可以实现这一点,但在我的例子中,它们通常更复杂、更不安全或消耗更多内存。不过欢迎提出任何建议。谢谢! 最佳答案 重置为null是不够的;的实现std::shared

c++ - Kinect v2 将颜色坐标映射到相机空间

我正在尝试将坐标从颜色空间映射到相机空间。我使用的代码如下:HRESULTModelRecognizer::MapColorToCameraCoordinates(conststd::vector&colorsps,std::vector&camerasps){//AccessframeHRESULThr=GetDepthFrame();if(SUCCEEDED(hr)){ICoordinateMapper*pMapper;hr=m_pKinectSensor->get_CoordinateMapper(&pMapper);if(SUCCEEDED(hr)){CameraSpacePo

c++ - 使用 unique_ptr 成员编写移动构造函数的正确方法(崩溃)

以下代码在VisualStudio2013下会崩溃我想知道为什么:在这种情况下编写移动构造函数的正确方法是什么?删除移动构造函数解决了这个问题。是VC++的错误还是这段代码有误?移动构造函数的默认定义有何不同,这使得这段代码不会崩溃,而我自己的定义会崩溃?#include#includeclassA{};classFoo{public:Foo(std::unique_ptrref):mRef(std::move(ref)){}Foo(Foo&&other):mRef(std::move(other.mRef)){}Foo(constFoo&other){}Foo&operator=(c

c++ - 将 unique_ptr 引用传递给 boost::bind?

我在CentOS6.6(gcc4.4.7)上使用Boost.Asio(1.41)进行开发。我希望io_service在启动时调用manger对象m中的成员函数run()。我尝试编译的代码如下所示:#include#include#includeboost::asio::io_serviceio;std::unique_ptrm;m=std::make_unique;io.post(boost::bind(&manager::run,&m));gcc对boost::bind语句进行了调整,其中包括:/usr/include/boost/bind/mem_fn_template.hpp:4

c++ - 当只剩下一个引用时删除由 shared_ptr 管理的对象

我有std::map>,它的作用类似于ResourceDatabase。项入std::map当有人请求不在std::map中的资源时插入(否则将从std::map提供服务)。同样,当Resource不再使用时,应该将其删除。在ResourceDeleter,我将从std::map中删除记录.问题是ResourceDeleter永远不会被调用,因为还有一个std::shared_ptr在std::map.当项目插入std::map时,总会有2std::shared_ptr-一个用于需要资源的代码,一个在std::map中.当第一个std::shared_ptr已删除,我需要从std::m

c++ - 将具有 unique_ptr 的类的构造函数作为成员复制到抽象类

我有一个类(C),它有一个vector的unique_ptr到一个抽象类(A)作为成员(member)。这是因为C必须与A类型的所有类一起工作,即它的子类。问题是我不知道如何为C编写复制构造函数,因为指针指向的对象的类型在编译时是未知的。在我看来这实际上是不可能的。任何人都可以确认这是不可能的吗?你对如何解决这个问题有什么建议吗?有一个没有复制构造函数的类是不是太糟糕了? 最佳答案 你没有说你是否控制抽象类和从它派生的类的代码。如果这样做,那么最简单的方法是在抽象类中提供一个纯虚方法Clone并在派生类中实现它。此方法应处理创建正确

c++ - 多线程的 shared_ptr 销毁是否安全?

我有两个类似的类:classFoo{public:voidbar(){std::lock_guardlock(m_mutex);m_data.push_back('x');}private:std::stringm_data;std::mutexm_mutex;};classPool{public:staticstd::shared_ptrCreate(intindex){std::lock_guardlock(m_mutex);if(m_pool.size()>10){m_pool.erase(m_pool.begin());}std::shared_ptr&ptr=m_pool[i

c++ - 线程安全,在C++中有序映射/哈希?

在C++中实现线程安全有序(note1)映射/哈希的最佳方法是什么?又是一种快速查找的数据结构(又称队列),不同线程可以在不同线程之间进行迭代,偶尔插入或删除元素,而不会干扰其他线程的Activity?std::map不是线程安全的,它的操作也不是原子的-尽管只有擦除会使迭代器无效将整个函数包装在整个map类中并不能解决问题-您可以在那里使用松散的迭代器来指向一个节点,该节点将被另一个线程擦除。它应该锁定并防止删除,直到当前线程是唯一引用它的线程为止,或者使用UNIX文件系统样式的“悬挂但删除后仍然有效的引用”方法tbb::concurrent_hash_map设计为线程安全的,但其迭